home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 726-750 / 745 / bbbbs / bbbbs55.lzh / rexx / ArcMsgs.rexx < prev    next >
OS/2 REXX Batch file  |  1992-08-08  |  7KB  |  293 lines

  1. /*    $VER: 5.5 ArcMsgs.rexx 8 Aug 1992 (8.8.92)
  2. archives unread conference messages into file in users email
  3. copyright 1991-92 Richard Lee Stockton  FREELY DISTRIBUTABLE
  4. */
  5.  
  6. SIGNAL ON BREAK_C
  7. SIGNAL ON ERROR
  8. SIGNAL ON SYNTAX
  9. OPTIONS FAILAT 999999
  10.  
  11. PARSE ARG name' 'single_dir' '.
  12. IF STRIP(single_dir)='' THEN single_dir=0
  13. IF name='' THEN CALL GETOUT(20)
  14.  
  15. CALL CLOSE(STDOUT)
  16. CALL OPEN(STDOUT,'RAM:ArcMsgs.STDOUT','W')
  17.  
  18. figarg='s:CONFIG.BBS'
  19. IF ~EXISTS(figarg) THEN figarg='BBS:BBS_TEXT/CONFIG.BBS'
  20. x=OPEN(f,figarg,'R')
  21. IF x=0 THEN
  22.   DO
  23.     SAY 's:CONFIG.BBS and BBS:BBS/CONFIG.BBS are both missing!'
  24.     CALL GETOUT(21)
  25.   END
  26.  
  27. data.=''
  28. DO i=1 TO 33
  29.   data.i=READLN(f)
  30. END
  31. CALL CLOSE(f)
  32.  
  33. compos=POS('/*',data.1)
  34. IF compos>0 THEN data.1=LEFT(data.1,compos-1)
  35. bbsname = STRIP(data.1)
  36. sysop   = WORD(data.2,1)
  37. bbspath = WORD(data.6,1)
  38. IF ~EXISTS(bbspath) THEN
  39.   DO
  40.     SAY bbspath 'does not exist!'
  41.     CALL GETOUT(22)
  42.   END
  43. testchar=RIGHT(bbspath,1)
  44. IF testchar~='/' & testchar~=':' THEN bbspath=bbspath'/'
  45.  
  46. msgpath = WORD(data.7,1)
  47. IF ~EXISTS(msgpath) THEN
  48.   DO
  49.     SAY msgpath 'does not exist!'
  50.     CALL GETOUT(23)
  51.   END
  52. testchar=RIGHT(msgpath,1)
  53. IF testchar~='/' & testchar~=':' THEN msgpath=msgpath'/'
  54. msgpath=msgpath'MSG'
  55.  
  56. extension=WORD(data.32,1)
  57. arccom=data.33
  58. compos=POS('/*',data.33)
  59. IF compos>0 THEN data.33=LEFT(data.33,compos-1)
  60. arccom=STRIP(data.33)
  61. IF LEFT(extension,1)~='.' THEN
  62.   DO
  63.     extension='.lzh'
  64.     arccom='lharc -m m'
  65.   END
  66.  
  67. x=OPEN(f,bbspath'Users/'name,'R')
  68. IF x=0 THEN
  69.   DO
  70.     CALL DELAY(150)
  71.     x=OPEN(f,bbspath'Users/'name,'R')
  72.     IF x=0 THEN
  73.       DO
  74.         SAY name 'user file is missing!'
  75.         CALL GETOUT(24)
  76.       END
  77.   END
  78. data.=''
  79. DO i=1 TO 25
  80.   data.i=READLN(f)
  81. END
  82. CALL CLOSE(f)
  83. level=data.20%1
  84. lastread.=0
  85.  
  86. msg.=''
  87. IF readopen(bbspath'Lists/Conferences') THEN
  88.   DO
  89.     DO i=1
  90.       line=READLN(f)
  91.       IF line='END' THEN BREAK
  92.       IF EOF(f) THEN BREAK
  93.       num=WORD(line,1)
  94.       IF DATATYPE(num,'N') THEN msg.num=WORD(line,2)
  95.     END
  96.     CALL CLOSE(f)
  97.   END
  98. CALL SETCLIP('BBS_MSGS')
  99.  
  100. CALL PRAGMA('P',-2)         /* lower the priority of this task */
  101.  
  102. x=OPEN(f,bbspath'Numbers/LastMail','R')
  103. IF x~=0 THEN lastm=READLN(f)+1
  104. CALL CLOSE(f)
  105. ADDRESS COMMAND 'ECHO >'bbspath'Numbers/LastMail 'lastm
  106.  
  107. filepath=bbspath'EmailFiles/'name
  108. CALL MAKEDIR(filepath)
  109. arcname=filepath'/BBBBS_'lastm
  110. x=OPEN(a,arcname,'W')
  111. IF x=0 THEN CALL GETOUT(30)
  112.  
  113. CALL WRITELN(a,'= Custom archived for' name)
  114. CALL WRITELN(a,'=' bbsname  'conference messages to' DATE('W') DATE() TIME('C'))
  115. CALL WRITELN(a,'')
  116. CALL newmsgs()
  117.  
  118. CALL CLOSE(a)
  119. CALL DELAY(28)
  120. IF WORD(STATEF(arcname),2)<80 THEN CALL GETOUT(24)
  121.  
  122. CALL PRAGMA('P',0)         /* normal priority */
  123. ADDRESS COMMAND arccom arcname||extension arcname
  124. x=OPEN(f,bbspath'Email/'name'/BBBBS.'lastm,'W')
  125. IF x=0 THEN CALL GETOUT(26)
  126. subj='All New Conference Messages'
  127. IF single_dir>0 THEN subj=msg.single_dir' conference messages.'
  128. CALL WRITELN(f,' Mail: 'lastm'   FILE: BBBBS_'lastm||extension)
  129. CALL WRITELN(f,' From: BBBBS')
  130. CALL WRITELN(f,'   To: 'name)
  131. CALL WRITELN(f,' Subj: 'subj)
  132. CALL WRITELN(f,' Date: 'DATE('W') DATE() TIME('C'))
  133. CALL WRITELN(f,LEFT('=',75,'='))
  134. CALL WRITELN(f,'Here are the archived new messages you requested.')
  135. CALL CLOSE(f)
  136. IF GETCLIP('BBS_level')~='' & WORD(GETCLIP('BBS_lastcaller'),1)=name THEN
  137.   DO
  138.     oldmess=GETCLIP('BBS_MESSAGE')
  139.     IF oldmess~='' THEN oldmess=oldmess||'0D0A'x
  140.     CALL SETCLIP('BBS_MESSAGE',oldmess||'Your archived messages are waiting in Email.')
  141.   END
  142. CALL GETOUT(0)
  143. EXIT
  144.  
  145.  
  146. /* Functions */
  147.  
  148. countcheck:
  149. PARSE ARG fname' '.
  150. IF ~readopen(fname) THEN RETURN(cknum)
  151. retval=STRIP(READLN(f))
  152. CALL CLOSE(f)
  153. IF ~DATATYPE(retval,'N') THEN retval=0
  154. RETURN(retval)
  155.  
  156.  
  157. newmsgs:
  158. IF single_dir>0 THEN
  159.   DO
  160.     msgdir=single_dir
  161.     CALL readmsg()
  162.     RETURN
  163.   END
  164. CALL WRITELN(a,'Scanning all Conferences for new messages..')
  165. DO newi=1 TO level
  166.   IF msg.newi='' THEN ITERATE newi
  167.   msgdir=newi
  168.   CALL readmsg()
  169. END
  170. RETURN
  171.  
  172.  
  173. readmsg:
  174. IF msg.msgdir='' | FIND(data.21,msgdir)>0 THEN RETURN;   /* sysop excluded */
  175. IF WORD(data.22,msgdir)=-1 THEN RETURN;  /*  user excluded */
  176. IF DATATYPE(WORD(data.22,msgdir),'N') THEN
  177.   lastread.msgdir=WORD(data.22,msgdir)
  178. lstwrt=countcheck(bbspath'Numbers/LastMessage'msgdir 0)
  179. frstwrt=countcheck(bbspath'Numbers/FirstMessage'msgdir 0)
  180. temp=''
  181. IF lastread.msgdir>=lstwrt THEN
  182.   DO
  183.     lastread.msgdir=lstwrt
  184.     RETURN
  185.   END
  186. CALL WRITELN(a,'Entering' msg.msgdir 'Message Conference..')
  187. dirname=msgpath||msgdir
  188. msglist.=0 /* set read to 0, unread to 1, and reply >=2 */
  189. firstmess=999999
  190. testlist=SHOWDIR(dirname)
  191. DO i=1 TO WORDS(testlist)
  192.   test=WORD(testlist,i)
  193.   IF test>lastread.msgdir THEN msglist.test=1
  194.   IF test<firstmess THEN firstmess=test
  195. END
  196. IF firstmess=999999 THEN firstmess=0
  197. CALL countcheck(bbspath'Numbers/FirstMessage'msgdir firstmess)
  198. msgstatus=1
  199. DO msgloop=1
  200.   lastreadnum=lastread.msgdir
  201.   DO WHILE msglist.lastreadnum=0 & lastreadnum<lstwrt
  202.     lastreadnum=lastreadnum+1
  203.   END
  204.   lastread.msgdir=lastreadnum
  205.   IF lastreadnum=lstwrt & msglist.lstwrt=0 THEN RETURN
  206.   DO mess=lastread.msgdir TO lstwrt+1
  207.     IF msglist.mess~=msgstatus THEN ITERATE mess
  208.     IF msgstatus>1 THEN CALL WRITELN(a,'Following the thread, level' msgstatus-1'.')
  209.     msglist.mess=0
  210.     arg=dirname'/'mess
  211.     IF ~EXISTS(arg) THEN
  212.       DO
  213.         CALL WRITELN(a,'Message number' mess 'is missing.')
  214.         ITERATE mess
  215.       END
  216.     IF ~readopen(arg) THEN ITERATE mess
  217.     firstline  = READLN(f)
  218.     secondline = READLN(f)
  219.     thirdline  = READLN(f)
  220.     forthline  = READLN(f)
  221.     CALL CLOSE(f)
  222.     IF WORDS(firstline)>2 THEN  /* if replies, change their num to >1 */
  223.       DO
  224.         thread=SUBSTR(firstline,WORDINDEX(firstline,4))
  225.         DO tindx=1 TO WORDS(thread)
  226.           test=WORD(thread,tindx)
  227.           IF msglist.test~=0 THEN msglist.test=msgstatus+1
  228.         END
  229.       END
  230.     CALL add_msg(arg)
  231.     IF thread~='' THEN
  232.        DO
  233.          thread=''
  234.          msgstatus=msgstatus+1
  235.        END
  236.   END
  237.   IF msgstatus>1 THEN msgstatus=msgstatus-1
  238. END
  239. RETURN
  240.  
  241.  
  242. readopen:
  243. PARSE ARG fname
  244. ok=OPEN(f,fname,'R')
  245. IF ok~=0 THEN RETURN(1)
  246. SAY fname 'failed to open for reading!'
  247. RETURN(0)
  248.  
  249.  
  250. readlines:
  251. CALL CLOSE(f)
  252. PARSE ARG tempname readstart .
  253. IF ~readopen(tempname) THEN RETURN(1)
  254. IF readstart<2 THEN lynes.=''
  255. DO ri=readstart
  256.   line=READLN(f)
  257.   IF EOF(f) THEN BREAK
  258.   lynes.ri=line
  259. END
  260. lynes.0=ri-1
  261. RETURN
  262.  
  263.  
  264. add_msg:
  265. ARG addname .
  266. x=OPEN(b,addname,'R')
  267. IF x=0 THEN SAY addname 'failed to open for reading!'
  268. ELSE
  269.   DO
  270.     data=READCH(b,65000)
  271.     CALL CLOSE(b)
  272.     CALL WRITECH(a,data)
  273.   END
  274. CALL WRITELN(a,'')
  275. CALL WRITELN(a,'')
  276. RETURN
  277.  
  278.  
  279. BREAK_C:
  280. SAY 'BREAK_C at line' SIGL
  281. CALL GETOUT(1)
  282.  
  283.  
  284. ERROR:
  285. SYNTAX:
  286. GETOUT:
  287. ARG errorout
  288. CALL SETCLIP('BBS_MSGS')
  289. IF errorout>0 | RC>0 THEN SAY 'Error:' errorout'  RC='RC'  SIGL='SIGL
  290. EXIT(errorout)
  291.  
  292. /* end of ArcMsgs.rexx */
  293.